package com.example.prom.qianduoduo.y2025.reader;

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class OCRInstrumentReader {

    /**
     * 预处理图像以提高 OCR 准确性
     *
     * @param inputImage 原始图像文件
     * @return 预处理后的图像
     * @throws IOException 如果读取或写入图像失败
     */
    private static BufferedImage preprocessImage(File inputImage) throws IOException {
        BufferedImage img = ImageIO.read(inputImage);

        // 转换为灰度图
        BufferedImage grayImage = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
        grayImage.getGraphics().drawImage(img, 0, 0, null);

        // 进一步处理可以加入二值化或去噪操作
        return grayImage;
    }

    /**
     * 使用 Tesseract 进行 OCR 识别
     *
     * @param imagePath 图像路径
     * @return 识别到的文本
     */
    public static String recognizeText(String imagePath) {
        ITesseract tesseract = new Tesseract();

        // 设置 Tesseract OCR 的路径
        tesseract.setDatapath("E:\\development\\Tesseract\\tessdata");

        // 设置语言（可选，默认为英文）
//        tesseract.setLanguage("eng");
        tesseract.setLanguage("chi_sim+eng");// 中文简体+英文

        try {
            // 预处理图像
            File imageFile = new File(imagePath);
            BufferedImage processedImage = preprocessImage(imageFile);

            // OCR 识别
            return tesseract.doOCR(processedImage);
        } catch (TesseractException | IOException e) {
            System.err.println("OCR 识别失败: " + e.getMessage());
            return null;
        }
    }

    public static void main(String[] args) {
        String imagePath = "F:\\desktop\\1753147211208.jpg"; // 仪表盘图像路径
        String result = recognizeText(imagePath);

        if (result != null) {
            System.out.println("识别结果: " + result);
        } else {
            System.out.println("未能识别到内容。");
        }
    }
}
